/**
 * ____________________ *
 *  ____ ____ ____ _  _ *
 *  |___ [__] |--< |\/| *
 * ____________________ *
 *
 * THE CORM PROJECT
 *
 * This file may only be used in accordance with the
 * terms of the Academic Free License ("AFL") v. 3.0,
 * as published by the Open Software Initiative.  A
 * copy of this license is provided in this source
 * release, and may be viewed online at:
 *
 * (http://www.opensource.org/licenses/afl-3.0.php)
 */
package org.eremite.corm.order;

import org.eremite.corm.BaseArchetype;
import org.eremite.corm.party.PartySummary;
import org.eremite.corm.product.SerialNumber;
import org.eremite.corm.product.Price;

import javax.measure.quantity.Quantity;
import java.util.Date;
import java.util.Set;

/**
 * The [@link OrderLine] archetype represents part of an
 * [@link Order] that is a summary of particular goods
 * or services ordered by a buyer.
 */
public class OrderLine extends BaseArchetype {
    private long ID;
    private long productTypeID;
    private SerialNumber serialNumber;
    private String comment;
    private int numberOrdered;
    private Price<? extends Quantity> unitPrice;
    private Date expectedDeliveryDate;

    private Set<ChargeLine> chargeLines;

    private Set<TaxOnLine> taxes;
    private PartySummary orderLineReceiver;
    private String deliveryInstructions;

    public long getID() {
        return ID;
    }

    public void setID(long ID) {
        this.ID = ID;
    }

    public long getProductTypeID() {
        return productTypeID;
    }

    public void setProductTypeID(long productTypeID) {
        this.productTypeID = productTypeID;
    }

    public SerialNumber getSerialNumber() {
        return serialNumber;
    }

    public void setSerialNumber(SerialNumber serialNumber) {
        this.serialNumber = serialNumber;
    }

    public String getComment() {
        return comment;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }

    public int getNumberOrdered() {
        return numberOrdered;
    }

    public void setNumberOrdered(int numberOrdered) {
        this.numberOrdered = numberOrdered;
    }

    public Price<? extends Quantity> getUnitPrice() {
        return unitPrice;
    }

    public void setUnitPrice(Price<? extends Quantity> unitPrice) {
        this.unitPrice = unitPrice;
    }

    public Date getExpectedDeliveryDate() {
        return expectedDeliveryDate;
    }

    public void setExpectedDeliveryDate(Date expectedDeliveryDate) {
        this.expectedDeliveryDate = expectedDeliveryDate;
    }

    public Set<ChargeLine> getChargeLines() {
        return chargeLines;
    }

    public void setChargeLines(Set<ChargeLine> chargeLines) {
        this.chargeLines = chargeLines;
    }

    public Set<TaxOnLine> getTaxes() {
        return taxes;
    }

    public void setTaxes(Set<TaxOnLine> taxes) {
        this.taxes = taxes;
    }

    public PartySummary getOrderLineReceiver() {
        return orderLineReceiver;
    }

    public void setOrderLineReceiver(PartySummary orderLineReceiver) {
        this.orderLineReceiver = orderLineReceiver;
    }

    public String getDeliveryInstructions() {
        return deliveryInstructions;
    }

    public void setDeliveryInstructions(String deliveryInstructions) {
        this.deliveryInstructions = deliveryInstructions;
    }
}
